package com.block.datapush.service.apipush.utils;

import cn.hutool.core.util.StrUtil;
import com.block.common.enums.BaseTypeInfoEnum;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Objects;
import java.util.Random;

/**
 * 金通宝
 */
public class JinTongBaoUtil {
    private static final String CHARSET_NAME = "UTF-8";



    public static Integer getGjj(String gongjijin) {
        if (StrUtil.equals(BaseTypeInfoEnum.Gjj.gjj001.getValue(), gongjijin)) {
            return 1;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Gjj.gjj002.getValue(), gongjijin)) {
            return 2;
        }
        return 3;
    }


    public static Integer getCar(String car) {
        if (StrUtil.equals(BaseTypeInfoEnum.Car.car001.getValue(), car)) {
            return 1;
        }else if (StrUtil.equals(BaseTypeInfoEnum.Car.car002.getValue(), car)) {
            return 2;
        }
        return 0;
    }


    public static Integer getHouse(String house) {
        if (StrUtil.equals(BaseTypeInfoEnum.House.hu001.getValue(), house)) {
            return 1;
        } else if (StrUtil.equals(BaseTypeInfoEnum.House.hu002.getValue(), house)) {
            return 2;
        }
        return 0;
    }

    public static Integer getloanAmount(String loanAmount) {
        if(StrUtil.equals(BaseTypeInfoEnum.LoanAmount.la001.getValue(), loanAmount)) {
            return 3;
        }else if(StrUtil.equals(BaseTypeInfoEnum.LoanAmount.la002.getValue(), loanAmount)) {
            return 5;
        }else if(StrUtil.equals(BaseTypeInfoEnum.LoanAmount.la003.getValue(), loanAmount)) {
            return 10;
        }else if(StrUtil.equals(BaseTypeInfoEnum.LoanAmount.la004.getValue(), loanAmount)) {
            return 20;
        }
        return 25;
    }

    public static Integer getyuqi(String yuqi) {
        if (StrUtil.equals(BaseTypeInfoEnum.Yuqi.yq001.getValue(), yuqi)) {
            return 4;
        }else if (StrUtil.equals(BaseTypeInfoEnum.Yuqi.yq002.getValue(), yuqi)) {
            return 3;
        }
        return 2;
    }

    public static Integer getxueli(String xueli) {
        if (StrUtil.equals(BaseTypeInfoEnum.XueLi.xl001.getValue(), xueli)) {
            return 0;
        }else if (StrUtil.equals(BaseTypeInfoEnum.XueLi.xl002.getValue(), xueli)) {
            return 3;
        }else if(StrUtil.equals(BaseTypeInfoEnum.XueLi.xl003.getValue(), xueli)) {
            return 4;
        }else if (StrUtil.equals(BaseTypeInfoEnum.XueLi.xl004.getValue(), xueli)) {
            return 5;
        }
        return 6;
    }

    public static Integer getjob(String job) {
        if (StrUtil.equals(BaseTypeInfoEnum.Gongzuo.gz001.getValue(), job)) {
            return 1;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Gongzuo.gz002.getValue(), job)) {
            return 4;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Gongzuo.gz003.getValue(), job)) {
            return 2;
        }
        return 0;
    }

    public static Integer getxinyongka(String xinyongka) {
        if (StrUtil.equals(BaseTypeInfoEnum.XinYongKa.xyk001.getValue(), xinyongka)) {
            return 1;
        }
        return 2;
    }


    public static Integer getbaodan(String baodan) {
        if (StrUtil.equals(BaseTypeInfoEnum.Baoxian.bx001.getValue(), baodan)) {
            return 0;
        }
        return 1;
    }



    public static Integer getloantime(String loantime) {
        if (StrUtil.equals(BaseTypeInfoEnum.LoanTime.lt001.getValue(), loantime)) {
            return 3;
        } else if (StrUtil.equals(BaseTypeInfoEnum.LoanTime.lt002.getValue(), loantime)) {
            return 6;
        } else if (StrUtil.equals(BaseTypeInfoEnum.LoanTime.lt003.getValue(), loantime)) {
            return 12;
        }
        return 24;

    }

    public static Integer getYongtu(String yongtu) {
        if (StrUtil.equals(BaseTypeInfoEnum.Yongtu.yt007.getValue(), yongtu)) {
            return 0;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Yongtu.yt005.getValue(), yongtu)) {
            return 4;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Yongtu.yt004.getValue(), yongtu)) {
            return 2;
        }else if (StrUtil.equals(BaseTypeInfoEnum.Yongtu.yt003.getValue(), yongtu)) {
            return 3;
        }else if (StrUtil.equals(BaseTypeInfoEnum.Yongtu.yt002.getValue(), yongtu)) {
            return 1;
        }
        return 7;
    }

    public static Integer getShouRu(String shouru) {
        if (StrUtil.equals(BaseTypeInfoEnum.Shouru.sr001.getValue(), shouru)) {
            return 2;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Shouru.sr002.getValue(), shouru)) {
            return 3;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Shouru.sr003.getValue(), shouru)) {
            return 5;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Shouru.sr004.getValue(), shouru)) {
            return 6;
        }
        return 7;
    }


    public static Integer getZhimaScore(String zhima) {
        if (StrUtil.equals(BaseTypeInfoEnum.Zhima.zm001.getValue(), zhima)) {
            return 0;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Zhima.zm003.getValue(), zhima)) {
            return 2;
        } else if (StrUtil.equals(BaseTypeInfoEnum.Zhima.zm004.getValue(), zhima)) {
            return 3;
        }
        return 4;
    }

    public static Integer getShebao(String shebao) {
        if(StrUtil.equals(BaseTypeInfoEnum.Shebao.sb001.getValue(), shebao)){
            return 1;
        }else if (StrUtil.equals(BaseTypeInfoEnum.Shebao.sb002.getValue(), shebao)){
            return 2;
        }
        return 3;
    }

    public static Integer getWeili(String weili) {
        if(StrUtil.equals(BaseTypeInfoEnum.WeiLi.wl001.getValue(), weili)) {
            return 4;
        }
        return 0;
    }

    public static Integer getbaitiao(String baitiao) {
        if(StrUtil.equals(BaseTypeInfoEnum.Baitiao.bt001.getValue(), baitiao)) {
            return  1;
        }
        return 2;
    }

    public static Integer gethuabei(String huabei) {
        if(StrUtil.equals(BaseTypeInfoEnum.Huabei.hb001.getValue(), huabei)) {
            return 1;
        }
        return 2;
    }


    private static final String AES_CBC = "AES/CBC/PKCS5Padding"; /** * AES
     中的 IV 必须是 16 字节（128位）长 */
    private static final Integer IV_LENGTH = 16;


    /*** * 空校验 * @param str 需要判断的值 */ public static
    boolean isEmpty(Object str) { return null == str || "".equals(str); }



    /*** * String 转 byte
     * @param str 需要转换的字符串 */
    public static byte[] getBytes(String str) { if (isEmpty(str)) { return null; }
        try {
        return str.getBytes(StandardCharsets.UTF_8); }
        catch (Exception e)
        { throw new RuntimeException(e);
        }
     }

     /***
     * 初始化向量（IV），它是一个随机生成的字节数组，用于增加加密和解密的安全性 */
    public static String getIV() { String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random(); StringBuilder sb = new StringBuilder(); for
    (int i = 0; i < IV_LENGTH; i++) { int number =
            random.nextInt(str.length()); sb.append(str.charAt(number)); }
        return sb.toString(); }


    /*** * 获取一个 AES 密钥规范 */
    public static SecretKeySpec getSecretKeySpec(String key) {
        SecretKeySpec secretKeySpec = new SecretKeySpec(getBytes(key), "AES");
        return secretKeySpec;
    }



    /** * 加密 - 自定义加密模式 * * @param text 需要
     加密的文本内容 * @param key 加密的密钥 key
     * @param iv 初始化向量 * @param mode 加密模式 */ public static
    String encrypt(String text, String key, String iv, String mode) {
        if
        (isEmpty(text) || isEmpty(key) || isEmpty(iv)) {
            return null;
        }
        try { // 创建AES加密器
            Cipher cipher = Cipher.getInstance(mode);
            SecretKeySpec secretKeySpec = getSecretKeySpec(key);
            cipher.init(Cipher.ENCRYPT_MODE,
                    secretKeySpec, new IvParameterSpec(getBytes(iv))); // 加密字节数组
            byte[] encryptedBytes = cipher.doFinal(getBytes(text)); // 将密文转换为 Base64 编码字符串
            return  Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /** * 加密 - 模
     式 CBC
     * * @param text 需要加密的文本内容 * @param key 加密的密钥 key
     * @param iv 初始化向量 * @return 加密后的内容 */

    public static
    String encryptCbc(String text, String key, String iv) {
        return encrypt(text, key, iv, AES_CBC); }


    /** * 解密 - 模式 CBC
     * * @param text 需要加密的文本内容 * @param key 加密的密钥 key
     * @param iv 初始化向量 * @return 加密后的内容 */
    public static String decryptCbc(String text, String key, String iv) {
        return  decrypt(text, key, iv, AES_CBC); }

    /** * 解密 - 自定义加密模式 *
     * @param text 需要解密的文本内容 * @param key 解密的密钥 key
     * @param iv 初始化向量 * @param mode 加密模式 */
    public static String decrypt(String text, String key, String iv, String mode) { if
    (isEmpty(text) || isEmpty(key) || isEmpty(iv)) { return null;
    } // 将密文转换为16字节的字节数组
        byte[] textBytes = Base64.getDecoder().decode(text); try { // 创建AES加密器
            Cipher cipher = Cipher.getInstance(mode); SecretKeySpec
                    secretKeySpec = getSecretKeySpec(key);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new
                    IvParameterSpec(Objects.requireNonNull(getBytes(iv)))); // 解密字节数组
            byte[] decryptedBytes = cipher.doFinal(textBytes); // 将明文转换为字符串
             return new String(decryptedBytes, StandardCharsets.UTF_8); } catch (Exception e) { throw new
                RuntimeException(e); } }



}
